package com.chixing.day13_list;

import java.util.HashSet;

public class HashSetDemo {
    public static void main(String[] args) {
        HashSet<String> setStr=  new HashSet<>();
        setStr.add("hello");
        setStr.add("run");
        setStr.add("maven");
        setStr.add("git");
        setStr.add("run");
        System.out.println(setStr);

        HashSet<Student> setStu=  new HashSet<>();
        setStu.add(new Student("smith",20));
        // new 两次，== false ,
        // 实际我们的业务中，认为 是同一个学生
        /*
            1. 为什么要重写 equals方法 ：
                实际我们的业务,比较两个对象 是不是同一个对象，比较的是内容值，而不是内存地址，所以要重写Object.equals()

           2. 为什么要重写 hashcode方法:
            在容器(集合)中添加大量的元素对象，如果只是与已有元素通过equals方法比较是否存在，随着元素越来越多，
            比较效率会越来越低，O(n)
            所以采用hashcode 方法，是内存地址的换算，直接通过返回的int 值 换算到内存地址，
            再判断该地址上是否有元素，若没有，则添加，若有，再用equals()方法比较，若相等，表示元素已存在，若不等，
            则散列在其他空的内存中，O(1), 大大减少了 equals()方法调用，从而提高了比较效率（添加效率）
        */
        setStu.add(new Student("katy",22));
        setStu.add(new Student("katy",22));
        System.out.println(setStu);




    }
}
